package com.sg.service.biz.bff.impl;

import cn.hutool.core.bean.BeanUtil;
import com.sg.common.util.RedisUtil;
import com.sg.service.biz.bff.FunctionalGoalService;
import com.sg.common.exception.Assert;
import com.wicket.okrframework.integration.FunctionalGoalservice;
import com.wicket.okrframework.integration.dto.*;
import org.apache.skywalking.apm.toolkit.trace.Tag;
import org.apache.skywalking.apm.toolkit.trace.Tags;
import org.apache.skywalking.apm.toolkit.trace.Trace;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.stream.Collectors;


/**
 * @author ：
 * @version 1.0
 * @date ：
 */
@Service
public class FunctionalGoalServiceImpl implements FunctionalGoalService {
    @Resource
    com.sg.service.biz.framework.FunctionalGoalService fwBaseFunctionalGoalClient;
    @Resource
    private RedisUtil redisUtil;

    /**
     * B1-3新增目标职责明细（管理）[809]
     * gen by moon at 8/10/2022, 3:30:55 AM
     */
    @Trace(operationName = "B1-3新增目标职责明细（管理）")
    @Tags({@Tag(key = "参数", value = "arg[0]"),
            @Tag(key = "返回值", value = "returnedObj")})
    @Override
    public BffAddTargetDetailsRespDto addTargetDetails(BffAddTargetDetailsReqDto reqDto) {


        AddTargetDetailsRespDto addTargetDetailsRespDto_1 = null;
//步骤0: D1-3新增目标职责明细 - addTargetDetails
        AddTargetDetailsRespDto addTargetDetailsRespDto = null;
        AddTargetDetailsReqDto addTargetDetailsReqDto = new AddTargetDetailsReqDto();
        if (reqDto != null) {
            addTargetDetailsReqDto.setDetailType(reqDto.getDetailType());//sourceId:38557_1
            addTargetDetailsReqDto.setContent(reqDto.getContent());//sourceId:38558_1
            addTargetDetailsReqDto.setOrderNumber(reqDto.getOrderNumber());//sourceId:38559_1
            addTargetDetailsReqDto.setTypeCode(reqDto.getTypeCode());//sourceId:38560_1
            addTargetDetailsReqDto.setEntityId(reqDto.getEntityId());//sourceId:38561_1
            addTargetDetailsReqDto.setSubjectLifeCycle(reqDto.getSubjectLifeCycle());//sourceId:49463_1
            addTargetDetailsReqDto.setOrganizationId(reqDto.getOrganizationId());//sourceId:49566_1
        }

        /*D1-3新增目标职责明细[810]   */
        Assert.isNull(addTargetDetailsReqDto.getDetailType(), "B1-3新增目标职责明细（管理）-D1-3新增目标职责明细-类型编码不能为空", false);
        Assert.isNull(addTargetDetailsReqDto.getContent(), "B1-3新增目标职责明细（管理）-D1-3新增目标职责明细-明细内容不能为空", false);
        Assert.isNull(addTargetDetailsReqDto.getOrderNumber(), "B1-3新增目标职责明细（管理）-D1-3新增目标职责明细-排序不能为空", false);
        Assert.isNull(addTargetDetailsReqDto.getTypeCode(), "B1-3新增目标职责明细（管理）-D1-3新增目标职责明细-所属对象实例类型不能为空", false);
        Assert.isNull(addTargetDetailsReqDto.getEntityId(), "B1-3新增目标职责明细（管理）-D1-3新增目标职责明细-所属对象实例ID不能为空", false);
        Assert.isNull(addTargetDetailsReqDto.getSubjectLifeCycle(), "B1-3新增目标职责明细（管理）-D1-3新增目标职责明细-主体生命周期不能为空", false);
        addTargetDetailsRespDto = fwBaseFunctionalGoalClient.addTargetDetails(addTargetDetailsReqDto).getData();

        addTargetDetailsRespDto_1 = addTargetDetailsRespDto;

        BffAddTargetDetailsRespDto retData = new BffAddTargetDetailsRespDto();
        if (addTargetDetailsRespDto_1 != null) {
            retData.setDutyTargetDetailId(addTargetDetailsRespDto_1.getDutyTargetDetailId());//sourceId:38565_1
        }


        return retData;
    }

    /**
     * B1-3查询目标职责明细列表[948]
     * gen by moon at 8/18/2022, 10:21:54 PM
     */
    @Trace(operationName = "B1-3查询目标职责明细列表")
    @Tags({@Tag(key = "参数", value = "arg[0]"),
            @Tag(key = "返回值", value = "returnedObj")})
    @Override
    public BffQueryTargetDetailsListRespDto queryTargetDetailsList(BffQueryTargetDetailsListReqDto reqDto) {


        QueryTargetDetailsListRespDto queryTargetDetailsListRespDto_1 = null;
//步骤0: D1-3 查询目标职责明细列表 - queryTargetDetailsList
        QueryTargetDetailsListRespDto queryTargetDetailsListRespDto = null;
        QueryTargetDetailsListReqDto queryTargetDetailsListReqDto = new QueryTargetDetailsListReqDto();
        queryTargetDetailsListReqDto.setSubjectLifeCycle("CURRENTLY_VALID");//sourceId:35881_1
        if (reqDto != null) {
            queryTargetDetailsListReqDto.setDetailType(reqDto.getDetailType());//sourceId:35871_1
            queryTargetDetailsListReqDto.setTypeCode(reqDto.getTypeCode());//sourceId:35872_1
            queryTargetDetailsListReqDto.setEntityId(reqDto.getEntityId());//sourceId:35873_1
        }

        /*D1-3 查询目标职责明细列表[813]   */
        Assert.isNull(queryTargetDetailsListReqDto.getTypeCode(), "B1-3查询目标职责明细列表-D1-3 查询目标职责明细列表-所属对象实例类型不能为空", false);
        Assert.isNull(queryTargetDetailsListReqDto.getEntityId(), "B1-3查询目标职责明细列表-D1-3 查询目标职责明细列表-所属对象实例ID不能为空", false);
        Assert.isNull(queryTargetDetailsListReqDto.getSubjectLifeCycle(), "B1-3查询目标职责明细列表-D1-3 查询目标职责明细列表-主体生命周期不能为空", false);
        queryTargetDetailsListRespDto = fwBaseFunctionalGoalClient.queryTargetDetailsList(queryTargetDetailsListReqDto).getData();

        queryTargetDetailsListRespDto_1 = queryTargetDetailsListRespDto;

        BffQueryTargetDetailsListRespDto retData = new BffQueryTargetDetailsListRespDto();
        if (queryTargetDetailsListRespDto_1 != null) {
            retData.setOrgDutyTargetDetailList(queryTargetDetailsListRespDto_1.getOrgDutyTargetDetailList().stream().map(item -> BeanUtil.toBean(item, BffOrgDutyTargetDetailDto.class)).collect(Collectors.toList()));//sourceId:35899_1
        }


        return retData;
    }

    /**
     * B1-3修改目标职责明细（管理）[816]
     * gen by moon at 8/10/2022, 3:30:56 AM
     */
    @Trace(operationName = "B1-3修改目标职责明细（管理）")
    @Tags({@Tag(key = "参数", value = "arg[0]"),
            @Tag(key = "返回值", value = "returnedObj")})
    @Override
    public BffUpdateTargetDetailRespDto updateTargetDetail(BffUpdateTargetDetailReqDto reqDto) {


        //步骤0: D1-3修改目标职责明细 - updateTargetDetail
        UpdateTargetDetailRespDto updateTargetDetailRespDto = null;
        UpdateTargetDetailReqDto updateTargetDetailReqDto = new UpdateTargetDetailReqDto();
        if (reqDto != null) {
            updateTargetDetailReqDto.setDutyTargetDetailId(reqDto.getDutyTargetDetailId());//sourceId:38709_1
            updateTargetDetailReqDto.setContent(reqDto.getContent());//sourceId:38710_1
            updateTargetDetailReqDto.setOrderNumber(reqDto.getOrderNumber());//sourceId:38711_1
            updateTargetDetailReqDto.setSubjectLifeCycle(reqDto.getSubjectLifeCycle());//sourceId:49521_1
        }

        /*D1-3修改目标职责明细[811]   */
        Assert.isNull(updateTargetDetailReqDto.getDutyTargetDetailId(), "B1-3修改目标职责明细（管理）-D1-3修改目标职责明细-目标职责明细ID不能为空", false);
        Assert.isNull(updateTargetDetailReqDto.getSubjectLifeCycle(), "B1-3修改目标职责明细（管理）-D1-3修改目标职责明细-主体生命周期不能为空", false);
        updateTargetDetailRespDto = fwBaseFunctionalGoalClient.updateTargetDetail(updateTargetDetailReqDto).getData();


        BffUpdateTargetDetailRespDto retData = new BffUpdateTargetDetailRespDto();


        return retData;
    }

    /**
     * B1-3查询管理模式目标职责明细列表(管理)[818]
     * gen by moon at 8/10/2022, 3:31:01 AM
     */
    @Trace(operationName = "B1-3查询管理模式目标职责明细列表(管理)")
    @Tags({@Tag(key = "参数", value = "arg[0]"),
            @Tag(key = "返回值", value = "returnedObj")})
    @Override
    public BffQueryTargetDetailMgtListRespDto queryTargetDetailMgtList(BffQueryTargetDetailMgtListReqDto reqDto) {


        QueryTargetDetailsListRespDto queryTargetDetailsListRespDto_1 = null;
//步骤0: D1-3 查询目标职责明细列表 - queryTargetDetailsList
        QueryTargetDetailsListRespDto queryTargetDetailsListRespDto = null;
        QueryTargetDetailsListReqDto queryTargetDetailsListReqDto = new QueryTargetDetailsListReqDto();
        if (reqDto != null) {
            queryTargetDetailsListReqDto.setDetailType(reqDto.getDetailType());//sourceId:35908_1
            queryTargetDetailsListReqDto.setTypeCode(reqDto.getTypeCode());//sourceId:35909_1
            queryTargetDetailsListReqDto.setEntityId(reqDto.getEntityId());//sourceId:35910_1
            queryTargetDetailsListReqDto.setIsArchive(reqDto.getIsArchive());//sourceId:39283_1
        }

        /*D1-3 查询目标职责明细列表[813]   */
        Assert.isNull(queryTargetDetailsListReqDto.getTypeCode(), "B1-3查询管理模式目标职责明细列表(管理)-D1-3 查询目标职责明细列表-所属对象实例类型不能为空", false);
        Assert.isNull(queryTargetDetailsListReqDto.getEntityId(), "B1-3查询管理模式目标职责明细列表(管理)-D1-3 查询目标职责明细列表-所属对象实例ID不能为空", false);
        Assert.isNull(queryTargetDetailsListReqDto.getIsArchive(), "B1-3查询管理模式目标职责明细列表(管理)-D1-3 查询目标职责明细列表-是否存档不能为空", false);
        queryTargetDetailsListRespDto = fwBaseFunctionalGoalClient.queryTargetDetailsList(queryTargetDetailsListReqDto).getData();

        queryTargetDetailsListRespDto_1 = queryTargetDetailsListRespDto;

        BffQueryTargetDetailMgtListRespDto retData = new BffQueryTargetDetailMgtListRespDto();
        if (queryTargetDetailsListRespDto_1 != null) {
            retData.setOrgDutyTargetDetailList(queryTargetDetailsListRespDto_1.getOrgDutyTargetDetailList().stream().map(item -> BeanUtil.toBean(item, BffOrgDutyTargetDetailDto.class)).collect(Collectors.toList()));//sourceId:35950_1
        }


        retData.setPageNum(queryTargetDetailsListRespDto.getPageNum());
        retData.setPageSize(queryTargetDetailsListRespDto.getPageSize());
        retData.setTotal(queryTargetDetailsListRespDto.getTotalNum());
        retData.setIsLastPage((Math.ceil(Double.valueOf(queryTargetDetailsListRespDto.getTotalNum()) / Double.valueOf(queryTargetDetailsListRespDto.getPageSize()))) <= retData.getPageNum());


        return retData;
    }
    //
}
